package designMode.FactoryMethod;

/**
 * Created by Auto_Wd on 2015/3/9.
 * com.reesechou.designMode.FactoryMethod
 */

/*
 定义：定义一个用于创建对象的接口，让子类决定实例化哪一个类。FactoryMethod使一个类的实例化延迟到其子类。
 适用性：
   1.当一个类不知道它所必须创建的对象的类的时候。
   2.当一个类希望由它的子类来指定它所创建的对象的时候。
   3： 3.当类将创建对象的职责委托给多个帮助子类中的某一个，并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。

 */

/*
工厂方法模式：
        一个抽象产品类，可以派生出多个具体产品类。
        一个抽象工厂类，可以派生出多个具体工厂类。
        每个具体工厂类只能创建一个具体产品类的实例。

        抽象工厂模式：
        多个抽象产品类，每个抽象产品类可以派生出多个具体产品类。
        一个抽象工厂类，可以派生出多个具体工厂类。
        每个具体工厂类可以创建多个具体产品类的实例。

        区别：
        工厂方法模式只有一个抽象产品类，而抽象工厂模式有多个。
        工厂方法模式的具体工厂类只能创建一个具体产品类的实例，而抽象工厂模式可以创建多个。
       */
public class Test {
    public static void main(String[] args){
        IWorkFactory studentWorkFactory = new StudentWorkFactory();
        studentWorkFactory.getWork().doWork();
        IWorkFactory teacherWorkFactory = new TeacherWorkFactory();
        teacherWorkFactory.getWork().doWork();
    }
}
